package com.tedu.day02.oop;

/**
 * 类：成员变量|成员方法|构造方法
 * 抽象类：成员变量|成员方法|构造方法
 * 成员变量：既可以变量，又可以常量
 * 构造方法：有，用于子类访问调用抽象【父类】的成员变量---赋值
 * 常用方法：既可以抽象，也可以非抽象
 * 抽象方法与非抽象方法出现在抽象类问题：
 *   A：抽象方法【重写】强制要求子类完成父类抽象方法
 *   B：非抽象方法【拓展】子类继承的事情，提高代码复用性
 */
abstract class Foo{
    //成员变量
    public int i=10;//变量
    public final int J=20;//成员变量：常量
    //强类型语言：大小写分明
    // public int j=30;
    //构造方法：无参构造器
    public Foo() {
        this(30); //调用当前类对象的其他构造器
    }
    public Foo(int i) {
        this.i = i;//覆盖父类的值
    }
    //成员方法
    public abstract void show();
    //成员方法：非抽象方法
    public void method(){
        System.out.println("Foo   method");
    }
}

//实现{子}类
class Goo extends Foo{
    public void show() {
        System.out.println("Goo  show");
    }
    public void method(){
        System.out.println("Goo  method");
    }
}
public class 抽象类补充知识点 {
    public static void main(String[] args) {
        //抽象类---继承---动态性---向上造型
        Foo f=new Goo();
        //①实例化---子类的构造器，无参构造器，在通过super（）调用父类无参构造器，
        //②执行抽象类无参构造器，发现有this（参数）调用本类其他有参构造器
        //③this调用的同时，完成对抽象类中i进行赋值 i=30
        System.out.println(f.i);  //?   30
        System.out.println(f.J);

        //---------------------------------------------
        f.show();    //输出：Goo  show     重写
        f.method();  //输出：Goo  method   拓展【子类方法重写】
    }
}
/*抽象类关键字共存问题？
           abstract  private  冲突     属性本类访问      抽象继承
           abstract  final    冲突     不可改变的方法值   抽象继承
           abstract  static   无意义   抽象类访问静态方法  抽象继承*/
abstract class Aoo{
    //private abstract void show1();冲突
    //private final abstract void show2();冲突
    //public static  abstract void show3();无意义:静态方法需要语法块{}、抽象方法
}





















